// pages/main/app-detail/app-detail.js
Page({
  data: {
    appId: '',
    contextAppId: '', // 上下文应用ID
    appDetail: null,
    loading: true,
    actions: [],
    // Toast提示框
    showToast: false,
    toastMessage: '',
    // 审核流程活跃索引
    reviewActiveIndex: 0,
    // 选项卡相关
    activeTabKey: 'contract', // 默认激活第一个选项卡
    currentTabFields: [], // 当前选项卡的字段
    // 底部按钮高度
    bottomActionsHeight: 102 // 默认一行按钮的高度
  },

  onLoad(options) {
    const appId = options.id;
    const contextAppId = options.context_id; // 从应用中心传递的上下文应用ID
    const categoryId = options.category_id; // 类别ID
    const subCategoryId = options.sub_category_id; // 子类别ID
    
    if (appId) {
      this.setData({ 
        appId,
        contextAppId: contextAppId || null,
        categoryId: categoryId || null,
        subCategoryId: subCategoryId || null
      });
      this.loadAppDetail(appId, contextAppId, categoryId, subCategoryId);
    } else {
      wx.showToast({
        title: '应用ID不存在',
        icon: 'none'
      });
      setTimeout(() => {
        wx.navigateBack();
      }, 1500);
    }
  },

  // 加载应用详情
  loadAppDetail(appId, contextAppId, categoryId, subCategoryId) {
    this.setData({ loading: true });
    
    const requestData = { 
      app_id: appId,
      context_app_id: contextAppId
    };
    
    // 如果有类别信息，添加到请求参数中
    if (categoryId) {
      requestData.category_id = categoryId;
    }
    if (subCategoryId) {
      requestData.sub_category_id = subCategoryId;
    }
    
    wx.request({
      url: `${getApp().globalData.serverUrl}/GetAppDetail/`,
      method: 'POST',
      data: requestData,
      success: (res) => {
        if (res.data.status) {
          const appDetail = res.data.app;
          
          // 计算审核流程活跃索引
          let reviewActiveIndex = 0;
          if (appDetail.Review && appDetail.Review.length > 0) {
            for (let i = 0; i < appDetail.Review.length; i++) {
              if (appDetail.Review[i].status === 'completed') {
                reviewActiveIndex = i + 1;
              } else {
                break;
              }
            }
          }
          
          // 初始化选项卡数据
          let currentTabData = null;
          if (appDetail.tabsData && appDetail.tabsData.length > 0) {
            // 深拷贝第一个选项卡数据，避免修改原始数据
            currentTabData = JSON.parse(JSON.stringify(appDetail.tabsData[0]));
            // 计算每列的最大宽度
            if (currentTabData.columns && currentTabData.tableData) {
              currentTabData = this.calculateColumnWidths(currentTabData);
            }
          }
          
          this.setData({
            appDetail: appDetail,
            actions: res.data.actions || [],
            loading: false,
            reviewActiveIndex: reviewActiveIndex,
            activeTabKey: appDetail.tabsData && appDetail.tabsData.length > 0 ? appDetail.tabsData[0].key : 'contract',
            currentTabData: currentTabData
          });
          
          // 计算底部按钮高度
          this.calculateBottomActionsHeight();
          
          // 设置页面标题
          wx.setNavigationBarTitle({
            title: res.data.app.name || '应用详情'
          });
        } else {
          wx.showToast({
            title: res.data.message || '获取应用详情失败',
            icon: 'none'
          });
          this.setData({ loading: false });
        }
      },
      fail: (err) => {
        console.error('获取应用详情失败:', err);
        wx.showToast({
          title: '网络错误',
          icon: 'none'
        });
        this.setData({ loading: false });
      }
    });
  },

  // 操作按钮点击
  onActionTap(e) {
    const action = e.currentTarget.dataset.action;
    
    console.log('点击了操作按钮:', action);
    
    // 如果按钮有子按钮，则显示微信原生菜单
    if (action.hasChildren && action.children && action.children.length > 0) {
      this.showActionSheet(action);
      return;
    }
    
    // 执行按钮操作
    this.executeAction(action);
  },

  // 显示微信原生操作菜单
  showActionSheet(action) {
    const itemList = action.children.map(child => child.name);
    
    wx.showActionSheet({
      itemList: itemList,
      success: (res) => {
        const selectedChild = action.children[res.tapIndex];
        if (selectedChild) {
          this.executeAction(selectedChild);
        }
      },
      fail: () => {
        // 用户取消选择
      }
    });
  },

  // 执行按钮操作
  executeAction(action) {
    // 根据不同的按钮ID执行不同操作
    switch(action.id) {
      case 'mark_location':
        // 跳转到地图标注页面
        wx.navigateTo({
          url: `/pages/main/map-marker/map-marker?app_id=${this.data.appId}&app_name=${encodeURIComponent(this.data.appDetail.name)}`
        });
        break;
      case 'estimate_result':
        // 跳转到估价结果页面
        wx.navigateTo({
          url: `/pages/main/estimate-result/estimate-result?app_id=${this.data.appId}&app_name=${encodeURIComponent(this.data.appDetail.name)}`
        });
        break;
      case 'modify':
        // 修改
        wx.showToast({
          title: '修改功能开发中',
          icon: 'none'
        });
        break;
      case 'cancel':
        // 注销
        wx.showModal({
          title: '确认注销',
          content: '确定要注销此项目吗？注销后无法恢复。',
          confirmColor: '#f5222d',
          success: (res) => {
            if (res.confirm) {
              wx.showToast({
                title: '注销功能开发中',
                icon: 'none'
              });
            }
          }
        });
        break;
      case 'estimate_to_formal':
        // 预估转正式
        wx.showModal({
          title: '确认转换',
          content: '确定要将预估项目转为正式项目吗？',
          success: (res) => {
            if (res.confirm) {
              wx.showToast({
                title: '转换功能开发中',
                icon: 'none'
              });
            }
          }
        });
        break;
      case 'cancel_cancel':
        // 取消注销
        wx.showModal({
          title: '确认取消注销',
          content: '确定要取消注销此项目吗？',
          confirmColor: '#52c41a',
          success: (res) => {
            if (res.confirm) {
              wx.showToast({
                title: '取消注销功能开发中',
                icon: 'none'
              });
            }
          }
        });
        break;
      case 'generate_report':
        // 生成报告
        wx.showToast({
          title: '生成报告功能开发中',
          icon: 'none'
        });
        break;
      case 'project_progress':
        // 跳转到流程进度页面
        wx.showToast({
          title: '流程进度功能开发中',
          icon: 'none'
        });
        break;
      case 'launch':
        // 审核功能
        wx.showToast({
          title: '审核功能开发中',
          icon: 'none'
        });
        break;
      case 'attendance':
        // 归档或生成报告
        wx.showToast({
          title: `${action.name}功能开发中`,
          icon: 'none'
        });
        break;
      case 'data_statistics':
        // 数据统计
        wx.showToast({
          title: '数据统计功能开发中',
          icon: 'none'
        });
        break;
      default:
        if (['apply_new','apply_workorder','invoice_application','payment_application'].includes(action.id)) {
          wx.navigateTo({
            url: `/pages/main/common-apply/common-apply?appId=${this.data.appId}&appName=${encodeURIComponent(this.data.appDetail.name)}`
          });
        } else {
          wx.showToast({
            title: `${action.name}功能演示`,
            icon: 'none',
            duration: 1500
          });
        }
        }
  },

  // 返回上一页
  onBackTap() {
    wx.navigateBack();
  },

  // 分享应用
  onShareAppMessage() {
    const app = this.data.appDetail;
    if (app) {
      return {
        title: `分享应用：${app.name}`,
        path: `/pages/main/app-detail/app-detail?id=${app.id}`,
        imageUrl: app.icon || ''
      };
    }
  },

  // 下拉刷新
  onPullDownRefresh() {
    this.loadAppDetail(
      this.data.appId, 
      this.data.contextAppId, 
      this.data.categoryId, 
      this.data.subCategoryId
    );
    wx.stopPullDownRefresh();
  },

  // 单选框切换
  onRadioToggle(e) {
    const index = e.currentTarget.dataset.index;
    const basicInfo = this.data.appDetail.basicInfo;
    
    if (basicInfo && basicInfo[index] && basicInfo[index].type === 'radio') {
      // 切换选中状态
      basicInfo[index].value = !basicInfo[index].value;
      
      this.setData({
        appDetail: this.data.appDetail
      });
      
      const status = basicInfo[index].value ? '是' : '否';
      const label = basicInfo[index].label;
      console.log(`${label}选择:`, status);
      
      this.showSuccessToast(`${label}已设置为：${status}`);
    }
  },

  // 显示成功提示框
  showSuccessToast(message) {
    this.setData({
      showToast: true,
      toastMessage: message
    });
    
    // 3秒后自动隐藏
    setTimeout(() => {
      this.setData({
        showToast: false
      });
    }, 3000);
  },

  // Toast点击事件
  onToastTap() {
    this.setData({
      showToast: false
    });
  },

  // 选项卡切换事件
  onTabChange(e) {
    const { activeKey } = e.detail;
    const tabsData = this.data.appDetail.tabsData || [];
    
    // 查找对应选项卡的数据
    const foundTab = tabsData.find(tab => tab.key === activeKey);
    
    if (!foundTab) {
      this.setData({
        activeTabKey: activeKey,
        currentTabData: null
      });
      return;
    }
    
    // 深拷贝选项卡数据，避免修改原始数据
    let currentTab = JSON.parse(JSON.stringify(foundTab));
    
    // 计算每列的最大宽度
    if (currentTab.columns && currentTab.tableData) {
      currentTab = this.calculateColumnWidths(currentTab);
    }
    
    this.setData({
      activeTabKey: activeKey,
      currentTabData: currentTab
    });
    
    console.log('切换到选项卡:', activeKey, currentTab);
  },

  // 计算每列的最大宽度
  calculateColumnWidths(tabData) {
    const columns = tabData.columns || [];
    const tableData = tabData.tableData || [];
    
    // 为每列计算最大宽度
    columns.forEach((col, colIndex) => {
      let maxWidth = col.minWidth || 120; // 默认最小宽度
      
      // 计算表头宽度（中文字符大约30rpx每个，英文和数字约15rpx）
      const headerText = col.label || '';
      const headerWidth = this.estimateTextWidth(headerText) + 32; // 加上padding
      maxWidth = Math.max(maxWidth, headerWidth);
      
      // 遍历所有数据行，找出该列的最大宽度
      tableData.forEach(row => {
        const cellValue = row[col.key] || '-';
        const cellText = String(cellValue);
        const cellWidth = this.estimateTextWidth(cellText) + 32; // 加上padding
        maxWidth = Math.max(maxWidth, cellWidth);
      });
      
      // 设置最小宽度限制（120rpx）和最大宽度限制（600rpx）
      col.width = Math.max(120, Math.min(maxWidth, 600));
    });
    
    return tabData;
  },

  // 估算文本宽度（rpx单位）
  estimateTextWidth(text) {
    if (!text) return 0;
    
    let width = 0;
    for (let i = 0; i < text.length; i++) {
      const char = text[i];
      // 中文字符、全角字符约30rpx
      if (char.match(/[\u4e00-\u9fa5\u3000-\u303f\uff00-\uffef]/)) {
        width += 30;
      } 
      // 数字、英文字符约15rpx
      else if (char.match(/[0-9a-zA-Z]/)) {
        width += 15;
      }
      // 其他字符约20rpx
      else {
        width += 20;
      }
    }
    
    return width;
  },

  // 计算底部按钮高度
  calculateBottomActionsHeight() {
    const actions = this.data.actions || [];
    const actionCount = actions.length;
    
    if (actionCount === 0) {
      this.setData({ bottomActionsHeight: 0 });
      return;
    }
    
    // 计算需要的行数（每行4个按钮）
    const rows = Math.ceil(actionCount / 4);
    
    // 计算总高度：行数 * 按钮高度 + 行数 * 间距 + 上下内边距
    const buttonHeight = 70; // 按钮高度
    const gap = 12; // 按钮间距
    const padding = 32; // 上下内边距
    const totalHeight = rows * buttonHeight + (rows - 1) * gap + padding;
    
    this.setData({ 
      bottomActionsHeight: totalHeight 
    });
    
    console.log(`底部按钮计算: ${actionCount}个按钮, ${rows}行, 总高度: ${totalHeight}rpx`);
  }
});
